home *** CD-ROM | disk | FTP | other *** search
/ Run Magazine ReRun 1985 Fall / rerun-1985-fall.d64 / disk doctor (.txt) < prev    next >
Encoding:
Commodore BASIC  |  1985-01-01  |  9.3 KB  |  407 lines

  1. 1000 rem-----------------------
  2. 1010 rem-                     -
  3. 1020 rem-     disk doctor     -
  4. 1030 rem-                     -
  5. 1040 rem-   by john tanzini   -
  6. 1050 rem-                     -
  7. 1060 rem-----------------------
  8. 1070 print "[147]select a number.": print
  9. 1080 print "1. list directory": print
  10. 1090 print "2. restore a file": print
  11. 1100 print "3. pack directory": print
  12. 1110 print "4. list used blocks": print
  13. 1120 print "5. view or modify": print "block": print
  14. 1130 print "6. format disk": print
  15. 1140 print "7. send disk command": print
  16. 1150 print: print: print "press e to end."
  17. 1160 get kk$: if kk$="" then 1160
  18. 1170 if kk$="e" then print "[147]";: end
  19. 1180 kk = val(kk$)
  20. 1190 on kk gosub 1380, 1720, 2610, 3350, 3810, 4770, 4950
  21. 1200 goto 1070
  22. 1210 rem-----------------------------
  23. 1220 rem-                           -
  24. 1230 rem-   disk error subroutine   -
  25. 1240 rem-                           -
  26. 1250 rem-----------------------------
  27. 1260 print: print: print "**** disk error ****"
  28. 1270 print: print e1$;" ";e2$;" ";e3$;" ";e4$
  29. 1280 print: print "press any key to"
  30. 1290 print "return to menu"
  31. 1300 get k$: if k$="" then 1300
  32. 1310 return
  33. 1320 rem-----------------------------
  34. 1330 rem-                           -
  35. 1340 rem-         part 1            -
  36. 1350 rem-   list entire directory   -
  37. 1360 rem-                           -
  38. 1370 rem-----------------------------
  39. 1380 open 15,8,15
  40. 1390 open 2,8,2,"#2"
  41. 1400 t = 18: s = 1: print "[147]"
  42. 1410 print#15,"u1:";2;8;t;s
  43. 1420 input#15, e1$, e2$, e3$, e4$
  44. 1430 if e1$<>"00" then gosub 1260: goto 1640
  45. 1440 print#15,"b-p:";2;0
  46. 1450 get#2,t$: get#2, s$
  47. 1460 for i = 2 to 226 step 32
  48. 1470 print#15,"b-p:";2;i
  49. 1480 get#2, a$: if a$="" then print "";
  50. 1490 get#2, a$: get#2, a$
  51. 1500 print "";
  52. 1510 for j = 1 to 16
  53. 1520 get#2, a$: print a$;
  54. 1530 next
  55. 1540 if a$<>"" then print: print
  56. 1550 get k$: if k$="" then 1590
  57. 1560 if k$="e" then 1640
  58. 1570 get k$: if k$="" then goto 1570
  59. 1580 if k$="e" then 1640
  60. 1590 next
  61. 1600 t = asc(t$+chr$(0)): s = asc(s$+chr$(0))
  62. 1610 if t>0 and t<36 then goto 1410
  63. 1620 print: print "press any key to": print "return to menu"
  64. 1630 get k$: if k$="" then 1630
  65. 1640 close 2: close 15
  66. 1650 return
  67. 1660 rem----------------------------
  68. 1670 rem-                          -
  69. 1680 rem-         part 2
  70. 1690 rem-  restore scratched file  -
  71. 1700 rem-                          -
  72. 1710 rem----------------------------
  73. 1720 print "[147]enter name of file"
  74. 1730 input n1$
  75. 1740 print: print: print "is the file a"
  76. 1750 print: print "1. program"
  77. 1760 print: print "2. sequential file"
  78. 1770 get k$: if k$="1" then ft = 130: goto 1800
  79. 1780 if k$="2" then ft = 129: goto 1800
  80. 1790 goto 1770
  81. 1800 print: print: print "restoring"; n1$
  82. 1810 open 15,8,15
  83. 1820 open 2,8,2,"#0"
  84. 1830 open 3,8,3,"#1"
  85. 1840 gosub 2350: rem find file in directory
  86. 1850 if pt=0 then 2040; rem cannot restore
  87. 1860 print#15,"b-a:";0;pt;ps
  88. 1870 input#15,e1$,e2$,e3$,e4$
  89. 1880 if e1$<>"00" and e1$<>"65" then gosub 1260: return
  90. 1890 if e1$="65" then 2040: rem cannot restore
  91. 1900 print#15,"u1:";3;0;pt;ps
  92. 1910 lt = pt: ls = ps
  93. 1920 print#15,"b-p:";3;0
  94. 1930 get#3,pt$: get#3,ps$
  95. 1940 pt = asc(pt$+chr$(0)): ps = asc(ps$+chr$(0))
  96. 1950 if pt=0 then goto 2100: rem successful restore
  97. 1960 print#15,"b-a:";0;pt;ps
  98. 1970 input#15,e1$,e2$,e3$,e4$
  99. 1980 if e1$<>"65" and e1$<>"00" then gosub 1260: return
  100. 1990 if e1$="65" then 2180: rem partial restore
  101. 2000 goto 1900: rem read another block
  102. 2010 rem
  103. 2020 rem ----- cannot restore -----
  104. 2030 rem
  105. 2040 print: print: print "*** cannot  ***"
  106. 2050 print "*** restore ***"
  107. 2060 goto 2280
  108. 2070 rem
  109. 2080 rem ----- successful restore -----
  110. 2090 rem
  111. 2100 print#15,"b-p:";2;dp
  112. 2110 print#2,chr$(ft);
  113. 2120 print#15,"u2:";2;0;t;s
  114. 2130 print: print: print "*** successful ***": print "***  restore   ***"
  115. 2140 goto 2280
  116. 2150 rem
  117. 2160 rem ----- partial restore -----
  118. 2170 rem
  119. 2180 print#15,"b-p:";2;dp
  120. 2190 print#2,chr$(ft);
  121. 2200 print#15,"u2:";2;0;t;s
  122. 2210 print#15,"b-p:";3;0
  123. 2220 print#3,chr$(0);
  124. 2230 print#15,"b-p:";3;248
  125. 2240 for z = 1 to 8: print#3,chr$(0);: next
  126. 2250 print#15,"u2:";3;0;lt;ls
  127. 2260 print: print: print "*** partial ***"
  128. 2270 print "*** restore ***"
  129. 2280 print: print "press any key to": print "return to menu"
  130. 2290 get k$: if k$="" then goto 2290
  131. 2300 close 2: close 3: close 15
  132. 2310 return
  133. 2320 rem
  134. 2330 rem ---- find track and sector of file ----
  135. 2340 rem
  136. 2350 t = 18: s = 1
  137. 2360 print#15,"u1:";2;8;t;s
  138. 2370 input#15, e1$, e2$, e3$, e4$
  139. 2380 if e1$<>"00" then gosub 1260: pt = 0: goto 2540
  140. 2390 print#15,"b-p:";2;0
  141. 2400 get#2,t$: get#2, s$
  142. 2410 for i = 2 to 226 step 32
  143. 2420 print#15,"b-p:";2;i
  144. 2430 get#2, a$: if a$<>"" then 2500
  145. 2440 get#2, pt$: get#2, ps$
  146. 2450 n2$ = ""
  147. 2460 for j = 1 to 16
  148. 2470 get#2, a$: if a$<>chr$(160) then n2$=n2$+a$
  149. 2480 next
  150. 2490 if n1$=n2$ then pt = asc(pt$+chr$(0)): ps = asc(ps$+chr$(0)): dp = i: return
  151. 2500 next
  152. 2510 t = asc(t$+chr$(0)): s = asc(s$+chr$(0))
  153. 2520 if t>0 and t<36 then goto 2360
  154. 2530 pt = 0
  155. 2540 return
  156. 2550 rem----------------------
  157. 2560 rem-                    -
  158. 2570 rem-       part 3       -
  159. 2580 rem-   pack directory   -
  160. 2590 rem-                    -
  161. 2600 rem----------------------
  162. 2610 print "[147]is correct disk in": print "drive? (y/n)
  163. 2620 [161] k$: [139] k$[178]"" [167] 2620
  164. 2630 [139] k$[179][177]"y" [167] [142]
  165. 2640 [153]: [153]: [153]
  166. 2650 [153] "*************"
  167. 2660 [153] "*  packing  *
  168. 2670 print "*************"
  169. 2680 open 15,8,15
  170. 2690 open 2,8,2,"#0"
  171. 2700 open 3,8,3,"#1"
  172. 2710 rt = 18: rs = 1
  173. 2720 wt = 18: ws = 1
  174. 2730 lt = 0
  175. 2740 df = 0
  176. 2750 ef = 0
  177. 2760 gosub 3060: rem next-write-block
  178. 2770 if ef=1 then 3010
  179. 2780 gosub 3220: rem next-read-block
  180. 2790 if ef=1 then 3010
  181. 2800 for ri = 2 to 226  step 32
  182. 2810 print#15, "b-p:";3;ri
  183. 2820 get#3, ft$
  184. 2830 if ft$="" then 2920
  185. 2840 if wi>255 then gosub 3060: rem next-write-block
  186. 2850 if ef=1 then 3010
  187. 2860 print#15, "b-p:";2;wi
  188. 2870 print#2, ft$;
  189. 2880 for i = 1 to 29
  190. 2890 get#3, a$: print#2, left$(a$+chr$(0),1);
  191. 2900 next i
  192. 2910 wi = wi + 32
  193. 2920 next ri
  194. 2930 if rt<>0 then 2780
  195. 2940 if wi<255 then goto 2970
  196. 2950 gosub 3060: rem next-write-block
  197. 2960 if df = 1 then 3010
  198. 2970 print#15, "b-p:";2;wi
  199. 2980 print#2,chr$(0);
  200. 2990 wi = wi + 32
  201. 3000 goto 2940
  202. 3010 close 2: close 3: close 15
  203. 3020 return
  204. 3030 rem
  205. 3040 rem ---- next-write-block ----
  206. 3050 rem
  207. 3060 if lt<>0 then print#15, "u2:";2;0;lt;ls
  208. 3070 input#15, e1$, e2$, e3$, e4$
  209. 3080 if e1$<>"00" then ef=1: gosub 1260: return
  210. 3090 lt = wt: ls = ws
  211. 3100 if wt=0 then df = 1: return
  212. 3110 print#15, "u1:";2;0;wt;ws
  213. 3120 input#15, e1$, e2$, e3$, e4$
  214. 3130 if e1$<>"00" then ef=1: gosub 1260: return
  215. 3140 print#15, "b-p:";2;0
  216. 3150 get#2, wt$: get#2, ws$
  217. 3160 wt = asc(wt$+chr$(0)): ws = asc(ws$+chr$(0))
  218. 3170 wi = 2
  219. 3180 return
  220. 3190 rem
  221. 3200 rem ---- next-read-block ----
  222. 3210 rem
  223. 3220 print#15,"u1:";3;0;rt;rs
  224. 3230 input#15, e1$, e2$, e3$, e4$
  225. 3240 if e1$<>"00" then ef=1: gosub 1260: return
  226. 3250 print#15, "b=p:";3;0
  227. 3260 get#3, rt$: get#3, rs$
  228. 3270 rt = asc(rt$+chr$(0)): rs = asc(rs$+chr$(0))
  229. 3280 return
  230. 3290 rem---------------------------
  231. 3300 rem-                         -
  232. 3310 rem-          part 4         -
  233. 3320 rem-  list allocated blocks  -
  234. 3330 rem-                         -
  235. 3340 rem---------------------------
  236. 3350 if lf=0 then dim bm%(35,4): lf = 1
  237. 3360 print "[147]"; tab(4); "track"; tab(10); "sector": print
  238. 3370 open 15,8,15
  239. 3380 open 2,8,2,"#0"
  240. 3390 print#15, "u1:";2;0;18;0
  241. 3400 input#15, e1$, e2$, e3$, e4$
  242. 3410 if e1$<>"00" then gosub 1260: goto 3720
  243. 3420 print#15, "b-p:";2;4
  244. 3430 for t = 1 to 35
  245. 3440 for j = 0 to 3
  246. 3450 get#2, a$
  247. 3460 bm%(t,j) = asc(a$+chr$(0))
  248. 3470 next j, t
  249. 3480 restore
  250. 3490 nb = 0
  251. 3500 for n = 1 to 4
  252. 3510 read t1, t2, ns
  253. 3520 for t = t1 to t2
  254. 3530 if t<>18 then nb = nb + bm%(t,0)
  255. 3540 if bm%(t,0)=ns then 3680
  256. 3550 s = 0
  257. 3560 for i = 1 to 3
  258. 3570 b2 = bm%(t,i)
  259. 3580 for j = 1 to 8
  260. 3590 b1 = b2/2: b2 = int(b1)
  261. 3600 if b1=b2 then print tab(4); t; tab(11); s
  262. 3610 get k$: if k$="" then 3650
  263. 3620 if k$="e" then 3720
  264. 3630 get k$: if k$="" then 3630
  265. 3640 if k$="e" then 3720
  266. 3650 s = s + 1
  267. 3660 if s=ns then 3680
  268. 3670 next j, i
  269. 3680 next t, n
  270. 3690 print: print nb; "blocks free.": print
  271. 3700 print: print "press any key to": print "return to menu"
  272. 3710 get k$: if k$="" then 3710
  273. 3720 close 2: close 15
  274. 3730 return
  275. 3740 data 1,17,21,18,24,19,25,30,18,31,35,17
  276. 3750 rem--------------------------
  277. 3760 rem-                        -
  278. 3770 rem-        part 5          -
  279. 3780 rem-  view or modify block  -
  280. 3790 rem-                        -
  281. 3800 rem--------------------------
  282. 3810 if vf=0 then dim b%(255): vf = 1
  283. 3820 open 15,8,15
  284. 3830 open 2,8,2,"#0"
  285. 3840 print "[147] all numbers decimal"
  286. 3850 print "----------------------": print: print
  287. 3860 print " 1. read block": print
  288. 3870 print " 2. view block": print
  289. 3880 print " 3. modify block": print
  290. 3890 print " 4. write block back"
  291. 3900 print: print: print: print "press e to exit"
  292. 3910 get c$: if c$="" then 3910
  293. 3920 if c$="e" then close 2: close 15: return
  294. 3930 c = val(c$)
  295. 3940 on c gosub 3990, 4130, 4400, 4530
  296. 3950 goto 3840
  297. 3960 rem
  298. 3970 rem---- block read ----
  299. 3980 rem
  300. 3990 print "[147]enter track, sector"
  301. 4000 input tt, ss
  302. 4010 print#15, "u1:";2;0;tt;ss
  303. 4020 input#15, e1$, e2$, e3$, e4$
  304. 4030 if e1$<>"00" then gosub 1260: return
  305. 4040 print#15,"b-p:";2;0
  306. 4050 for i = 0 to 255
  307. 4060 get#2, a$
  308. 4070 b%(i) = asc(a$ + chr$(0))
  309. 4080 next
  310. 4090 return
  311. 4100 rem
  312. 4110 rem---- view block ----
  313. 4120 rem
  314. 4130 for i = 0 to 3
  315. 4140 print "[147]track ="; tt; "sect ="; ss: print
  316. 4150 for j = 0 to 15
  317. 4160 n = 4*j + 64*i
  318. 4170 s2$ = ""
  319. 4180 s1$ = right$("   "+str$(n),3) + chr$(125)
  320. 4190 for k = 0 to 1
  321. 4200 m = n + 2*k
  322. 4210 s1$ = s1$ + right$("   "+str$(b%(m)),3) + "" + right$("   "+str$(b%(m+1)),3) + "[146]"
  323. 4220 a$ = chr$(32)
  324. 4230 if b%(m)>31 then if b%(m)<123 then a$ = chr$(b%(m))
  325. 4240 s2$ = s2$ + a$
  326. 4250 a$ = chr$(32)
  327. 4260 if b%(m+1)>31 then if b%(m+1)<123 then a$ = chr$(b%(m+1))
  328. 4270 s2$ = s2$ + a$
  329. 4280 next k
  330. 4290 print s1$; chr$(125); s2$
  331. 4300 next j
  332. 4310 print: print: print "press any key to cont"
  333. 4320 print tab(12); "e to end"
  334. 4330 get k$: if k$="" then 4330
  335. 4340 if k$="e" then return
  336. 4350 next i
  337. 4360 return
  338. 4370 rem
  339. 4380 rem---- change blk ----
  340. 4390 rem
  341. 4400 print "[147]press return[146] to"
  342. 4410 print "return to menu.": print: print: print
  343. 4420 print "enter location, data"
  344. 4430 l = -1: d = -1
  345. 4440 input "(0-255)"; l, d
  346. 4450 if (l<0)or(d<0) then return
  347. 4460 if l>255 or d>255 then print "* number too large *": print: goto 4420
  348. 4470 b%(l) = d
  349. 4480 print
  350. 4490 goto 4420
  351. 4500 rem
  352. 4510 rem---- block write ----
  353. 4520 rem
  354. 4530 print "[147]"; tab(1); tt; "[157],"; ss
  355. 4540 print "[145][145]enter track, sector"
  356. 4550 input tt, ss
  357. 4560 print "are you sure? (y/n)
  358. 4570 [161] a$: [139] a$[178]"" [167] [137] 4570
  359. 4580 [139] a$[179][177]"y" [167] [142]
  360. 4590 [153]
  361. 4600 [153] "*******************"
  362. 4610 [153] "*  writing block  *"
  363. 4620 [153] "*******************"
  364. 4630 [152]15,"b-p:";2;0
  365. 4640 [129] l [178] 0 [164] 255
  366. 4650 [152]2, [199](b%(l));
  367. 4660 [130] l
  368. 4670 [152]15, "u2:";2;0;tt;ss
  369. 4680 [132]15, e1$, e2$, e3$, e4$
  370. 4690 [139] e1$[179][177]"00" [167] [141] 1260: [142]
  371. 4700 [142]
  372. 4710 [143]-----------------------
  373. 4720 [143]-                     -
  374. 4730 [143]-        part 6       -
  375. 4740 [143]-    format a disk    -
  376. 4750 [143]-                     -
  377. 4760 [143]-----------------------
  378. 4770 [153] "loadenter name of disk"
  379. 4780 [133] na$
  380. 4790 [153] "disk i.d."
  381. 4800 [133] id$
  382. 4810 [153] "is correct disk in": [153] "drive? (y/n)"
  383. 4820 [161] k$: [139] k$[178]"" [167] 4820
  384. 4830 [139] k$[179][177]"y" [167] [142]
  385. 4840 [159] 15,8,15,"n:"[170]na$[170]","[170]id$
  386. 4850 [132]15, e1$, e2$, e3$, e4$
  387. 4860 [139] e1$[179][177]"00" [167] [141] 1260
  388. 4870 [160] 15
  389. 4880 [142]
  390. 4890 [143]-----------------------
  391. 4900 [143]-                     -
  392. 4910 [143]-        part 7       -
  393. 4920 [143]-  send disk command  -
  394. 4930 [143]-                     -
  395. 4940 [143]-----------------------
  396. 4950 [153] "loadenter disk command": [153]: [153] "?";
  397. 4960 c$ [178] ""
  398. 4970 [158] 65487
  399. 4980 c [178] [194](780)
  400. 4990 [139] c[179][177]13 [167] c$ [178] c$ [170] [199](c): [137] 4970
  401. 5000 [159] 15,8,15: [159] 2,8,2,"#"
  402. 5010 [152]15, c$
  403. 5020 [132]15, e1$, e2$, e3$, e4$
  404. 5030 [139] e1$[179][177]"00" [175] e1$[179][177]"01" [167] [141] 1260
  405. 5040 [160] 2: [160] 15
  406. 5050 [142]
  407.